﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.EntityClient;
using CongregacaoOs.Data;
using System.Configuration;
using System.Data.SqlClient;

namespace CongregacaoOs.Business
{
    [System.ComponentModel.DataObject]
    public class ccPessoaBus
    {
        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
        public int PessoaSaveOrUpdate(ccPessoa pessoa, string aQuestion = "")
        {
            if (pessoa.nome == null) { throw new Exception("O nome não foi informado"); }
            if (pessoa.idCargo == null) { throw new Exception("O cargo do usuário não foi informado"); }
            if (pessoa.email == null) { throw new Exception("O email do usuário não foi informado"); }

            string ConnectionString = ConfigurationManager.ConnectionStrings["CCBConection"].ConnectionString;

            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                try
                {
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "ccPessoaSave";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        SqlParameter param;

                        param = cmd.Parameters.Add("IDPESSOA", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idPessoa != 0)
                            param.Value = pessoa.idPessoa;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("NOME", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.nome != null)
                            param.Value = pessoa.nome;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("STATUS", DbType.Boolean);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.status != null)
                            param.Value = pessoa.status;
                        else
                            param.Value = DBNull.Value;


                        param = cmd.Parameters.Add("IDUSUARIO", DbType.Guid);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idUsuario != null)
                            param.Value = pessoa.idUsuario;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDCARGO", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idCargo != 0)
                            param.Value = pessoa.idCargo;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("FONE", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.fone != null)
                            param.Value = pessoa.fone;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("CELULAR", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.celular != null)
                            param.Value = pessoa.celular;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("EMAIL", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.email != null)
                            param.Value = pessoa.email;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDREGIONAL", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idRegional != null)
                            param.Value = pessoa.idRegional;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDDISTRITAL", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idDistrital != 0)
                            param.Value = pessoa.idDistrital;
                        else
                            param.Value = DBNull.Value;


                        param = cmd.Parameters.Add("IDCIDADE", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idCidade != null)
                            param.Value = pessoa.idCidade;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDCOMUM", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idComum != null)
                            param.Value = pessoa.idComum;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("QUESTION", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (aQuestion != "")
                            param.Value = aQuestion;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDSETOR", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idSetor != null)
                            param.Value = pessoa.idSetor;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDADM", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idAdm != null)
                            param.Value = pessoa.idAdm;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDRESULT", DbType.Int32);
                        param.Direction = ParameterDirection.Output;

                        int resultado = 0;
                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            cmd.ExecuteNonQuery();

                            if (cmd.Parameters["IDRESULT"].Value != DBNull.Value)
                            {
                                resultado =  cmd.Parameters["IDRESULT"].Value != null ? Convert.ToInt32(cmd.Parameters["IDRESULT"].Value) : 0;
                            }
                        }

                        return resultado;
                    }
                }
                catch (Exception)
                {
                    return 0;
                }

            }
        }

        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
        public List<ccPessoaSelect2_Result> PessoaSelect(ccPessoa pessoa)
        {
            using (EntityConnection conn = new EntityConnection("name = CcbOrdemServico"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "CcbOrdemServico.ccPessoaSelect2";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        EntityParameter param;
                        param = cmd.Parameters.Add("IDPESSOA", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idPessoa != 0)
                            param.Value = pessoa.idPessoa;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("NOME", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.nome != "")
                            param.Value = pessoa.nome;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("STATUS", DbType.String);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.status != null)
                            param.Value = pessoa.status;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDREGIONAL", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idRegional != 0)
                            param.Value = pessoa.idRegional;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDDISTRITAL", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idDistrital != 0)
                            param.Value = pessoa.idDistrital;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDADM", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idAdm != 0)
                            param.Value = pessoa.idAdm;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDSETOR", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (pessoa.idSetor != 0)
                            param.Value = pessoa.idSetor;
                        else
                            param.Value = DBNull.Value;


                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {

                                List<ccPessoaSelect2_Result> _result = new List<ccPessoaSelect2_Result>();
                                while (reader.Read())
                                {
                                    ccPessoaSelect2_Result _pessoa = new ccPessoaSelect2_Result();
                                    _pessoa.idPessoa = reader.IsDBNull(reader.GetOrdinal("idPessoa")) == false ? reader.GetInt32(reader.GetOrdinal("idPessoa")) : 0;
                                    _pessoa.Servo = reader.IsDBNull(reader.GetOrdinal("Servo")) == false ? reader.GetString(reader.GetOrdinal("Servo")) : "";
                                    _pessoa.status = reader.IsDBNull(reader.GetOrdinal("status")) == false ? reader.GetBoolean(reader.GetOrdinal("status")) : false;
                                    _pessoa.fone = reader.IsDBNull(reader.GetOrdinal("fone")) == false ? reader.GetString(reader.GetOrdinal("fone")) : "";
                                    _pessoa.celular = reader.IsDBNull(reader.GetOrdinal("celular")) == false ? reader.GetString(reader.GetOrdinal("celular")) : "";
                                    _pessoa.email = reader.IsDBNull(reader.GetOrdinal("email")) == false ? reader.GetString(reader.GetOrdinal("email")) : "";
                                    _pessoa.Regional = reader.IsDBNull(reader.GetOrdinal("Regional")) == false ? reader.GetString(reader.GetOrdinal("Regional")) : "";
                                    _pessoa.Distrital = reader.IsDBNull(reader.GetOrdinal("Distrital")) == false ? reader.GetString(reader.GetOrdinal("Distrital")) : "";

                                    _pessoa.Cidade = reader.IsDBNull(reader.GetOrdinal("Cidade")) == false ? reader.GetString(reader.GetOrdinal("Cidade")) : "";
                                    _pessoa.Comum = reader.IsDBNull(reader.GetOrdinal("Comum")) == false ? reader.GetString(reader.GetOrdinal("Comum")) : "";
                                    _pessoa.UserName = reader.IsDBNull(reader.GetOrdinal("UserName")) == false ? reader.GetString(reader.GetOrdinal("UserName")) : "";
                                    _pessoa.RoleName = reader.IsDBNull(reader.GetOrdinal("RoleName")) == false ? reader.GetString(reader.GetOrdinal("RoleName")) : "";
                                    _pessoa.Cargo = reader.IsDBNull(reader.GetOrdinal("Cargo")) == false ? reader.GetString(reader.GetOrdinal("Cargo")) : "";
                                    _pessoa.PasswordQuestion = reader.IsDBNull(reader.GetOrdinal("PasswordQuestion")) == false ? reader.GetString(reader.GetOrdinal("PasswordQuestion")) : "";
                                    _pessoa.Setor = reader.IsDBNull(reader.GetOrdinal("Setor")) == false ? reader.GetString(reader.GetOrdinal("Setor")) : "";

                                    _pessoa.Adm = reader.IsDBNull(reader.GetOrdinal("Adm")) == false ? reader.GetString(reader.GetOrdinal("Adm")) : "";
                                    _pessoa.IsApproved = reader.IsDBNull(reader.GetOrdinal("IsApproved")) == false ? reader.GetBoolean(reader.GetOrdinal("IsApproved")) : false;
                                    _result.Add(_pessoa);

                                }
                                return _result;
                            }
                        }


                    }
                }
                catch (Exception)
                {
                    return null;
                }

            }
        }


        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
        public GetServantFeatures1_Result PessoaFeaturesServantOfGod(Guid aUserId)
        {
            using (EntityConnection conn = new EntityConnection("name = CcbOrdemServico"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "CcbOrdemServico.GetServantFeatures";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        EntityParameter param;
                        param = cmd.Parameters.Add("USERID", DbType.Guid);
                        param.Direction = ParameterDirection.Input;
                        if (aUserId != null)
                            param.Value = aUserId;
                        else
                            param.Value = DBNull.Value;


                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {

                                GetServantFeatures1_Result _pessoa = new GetServantFeatures1_Result();
                                while (reader.Read())
                                {

                                    _pessoa.idPessoa = reader.IsDBNull(reader.GetOrdinal("idPessoa")) == false ? reader.GetInt32(reader.GetOrdinal("idPessoa")) : 0;
                                    _pessoa.idRegional = reader.IsDBNull(reader.GetOrdinal("idRegional")) == false ? reader.GetInt32(reader.GetOrdinal("idRegional")) : 0;
                                    _pessoa.idDistrital = reader.IsDBNull(reader.GetOrdinal("idDistrital")) == false ? reader.GetInt32(reader.GetOrdinal("idDistrital")) : 0;
                                    _pessoa.idCidade = reader.IsDBNull(reader.GetOrdinal("idCidade")) == false ? reader.GetInt32(reader.GetOrdinal("idCidade")) : 0;
                                    _pessoa.idAdm = reader.IsDBNull(reader.GetOrdinal("idAdm")) == false ? reader.GetInt32(reader.GetOrdinal("idAdm")) : 0;
                                }
                                return _pessoa;
                            }
                        }


                    }
                }
                catch (Exception)
                {
                    return null;
                }

            }
        }


        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
        public List<String> PessoaEmailBySetor(int aIdSetor, int aIdADM)
        {
            using (EntityConnection conn = new EntityConnection("name = CcbOrdemServico"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "CcbOrdemServico.ccPessoaEmailBySetor1";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        EntityParameter param;
                        param = cmd.Parameters.Add("IDSETOR", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (aIdSetor != 0)
                            param.Value = aIdSetor;
                        else
                            param.Value = DBNull.Value;
                        
                        param = cmd.Parameters.Add("IDADM", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (aIdADM != 0)
                            param.Value = aIdADM;
                        else
                            param.Value = DBNull.Value;


                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {
                                List<String> _result = new List<String>();
                                String _pessoa;
                                while (reader.Read())
                                {
                                    _pessoa = reader.IsDBNull(reader.GetOrdinal("email")) == false ? reader.GetString(reader.GetOrdinal("email")) : "";
                                    _result.Add(_pessoa);
                                }
                                return _result;
                            }
                        }


                    }
                }
                catch (Exception)
                {
                    return null;
                }

            }
        }


        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
        public string GetEmailPessoaByID(int aIdServo)
        {
            using (EntityConnection conn = new EntityConnection("name = CcbOrdemServico"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "CcbOrdemServico.GetEmailPessoaByID1";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        EntityParameter param;
                        param = cmd.Parameters.Add("IDSERVO", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (aIdServo != 0)
                            param.Value = aIdServo;
                        else
                            param.Value = DBNull.Value;

                        string _email = string.Empty;
                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {
                                while (reader.Read())
                                {
                                    _email = reader.IsDBNull(reader.GetOrdinal("email")) == false ? reader.GetString(reader.GetOrdinal("email")) : "";

                                }

                                return _email;


                            }
                        }


                    }
                }
                catch (Exception)
                {
                    return null;
                }

            }
        }

        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
        public List<ccPessoaComboBox_Result> PessoaComboBox(int aIdSetor, int aIdAdm)
        {
            using (EntityConnection conn = new EntityConnection("name = CcbOrdemServico"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "CcbOrdemServico.ccPessoaComboBox1";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        EntityParameter param;
                        param = cmd.Parameters.Add("IDSETOR", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (aIdSetor != 0)
                            param.Value = aIdSetor;
                        else
                            param.Value = DBNull.Value;

                        param = cmd.Parameters.Add("IDADM", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (aIdAdm != 0)
                            param.Value = aIdAdm;
                        else
                            param.Value = DBNull.Value;


                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {
                                List<ccPessoaComboBox_Result> _result = new List<ccPessoaComboBox_Result>();

                                while (reader.Read())
                                {
                                    ccPessoaComboBox_Result _pessoa = new ccPessoaComboBox_Result();
                                    _pessoa.idServo = reader.IsDBNull(reader.GetOrdinal("idServo")) == false ? reader.GetInt32(reader.GetOrdinal("idServo")) : 0;
                                    _pessoa.Servo = reader.IsDBNull(reader.GetOrdinal("Servo")) == false ? reader.GetString(reader.GetOrdinal("Servo")) : "";
                                    _result.Add(_pessoa);
                                }
                                return _result;
                            }
                        }


                    }
                }
                catch (Exception)
                {
                    return null;
                }

            }
        }

        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]
        public void PessoaDelete(int id)
        {
            try
            {
                using (CcbOrdemServico objDB = new CcbOrdemServico())
                {
                    objDB.ccPessoaDelete(id);
                }
            }
            catch (System.Exception)
            {

                throw;
            }
        }
    }
}
